import { getOssSTS } from '@/services/ant-design-pro/utils';
import OSS from 'ali-oss';
import { v4 as uuidv4 } from 'uuid';

import { Upload, Button } from 'antd';
import { UploadOutlined } from '@ant-design/icons';

const AliOssUploader: React.FC = () => {
  const initOSS = (): Promise<any> => {
    return new Promise(async (resolve) => {
      const { data } = await getOssSTS();
      const client = new OSS({
        // yourRegion填写Bucket所在地域。以华东1（杭州）为例，Region填写为oss-cn-hangzhou。
        region: 'oss-cn-chengdu',
        // 从STS服务获取的临时访问密钥（AccessKey ID和AccessKey Secret）。
        accessKeyId: data.Credentials.AccessKeyId,
        accessKeySecret: data.Credentials.AccessKeySecret,
        // 从STS服务获取的安全令牌（SecurityToken）。
        stsToken: data.Credentials.SecurityToken,
        refreshSTSToken: async () => {
          // 向您搭建的STS服务获取临时访问凭证。
          const info = await getOssSTS();
          return {
            accessKeyId: info.data.Credentials.AccessKeyId,
            accessKeySecret: info.data.Credentials.AccessKeySecret,
            stsToken: info.data.Credentials.SecurityToken,
          };
        },
        // 刷新临时访问凭证的时间间隔，单位为毫秒。
        refreshSTSTokenInterval: 300000,
        // 填写Bucket名称。
        bucket: 'ybk-fund-store',
        secure: true,
      });
      console.log(client, 'client');
      resolve(client);
    });
  };

  const uploadFile = async (options: any) => {
    const { onSuccess, onError, file } = options;
    try {
      // 填写Object完整路径。Object完整路径中不能包含Bucket名称。
      // 您可以通过自定义文件名（例如exampleobject.txt）或文件完整路径（例如exampledir/exampleobject.txt）的形式实现将数据上传到当前Bucket或Bucket中的指定目录。
      // data对象可以自定义为file对象、Blob数据或者OSS Buffer。
      const client = await initOSS();
      const date = new Date();
      const year = date.getFullYear().toString();
      const month = (date.getMonth() + 1).toString().padStart(2, '0');
      const day = date.getDate().toString().padStart(2, '0');
      const suffix = file.name.substring(file.name.lastIndexOf('.'));
      const result = await client.put(
        `zhonghui/file/${year}${month}${day}/${uuidv4()}${suffix}`,
        file,
      );
      console.log(result, 'result');
      onSuccess(result);
    } catch (e) {
      console.log(e, 'eee');
      onError(e);
    }
  };

  return (
    <Upload customRequest={uploadFile} maxCount={1}>
      <Button icon={<UploadOutlined />}>点击上传</Button>
    </Upload>
  );
};

export default AliOssUploader;
